package views {
	import blitting.SpriteSheetDisplayObject;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.geom.Rectangle;

	/**
	 * @author Charlie MacIsaac
	 */
	// TODO : Move this to the blitting package
	public class Canvas extends Bitmap {
		// PROPERTIES =============================================================================
		private var _children : Array;
		
		private var _color : uint;
		
		// GETTERS + SETTERS ======================================================================
		// CONSTRUCTOR ============================================================================
		public function Canvas(stage : Stage, color : uint) {
			super(new BitmapData(stage.stageWidth, stage.stageHeight, false));
			_color = color;
			
			_children = [];
			addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler, false, 0, true);
			addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler, false, 0, true);
		}
		
		// PUBLIC =================================================================================
		public function addChild(child : SpriteSheetDisplayObject) : void {
			child.canvas = this;
			_children.push(child);
		}
		
		public function addChildAt(child : SpriteSheetDisplayObject, index : uint) : void {
			child.canvas = this;
			_children.splice(child, 0, index);
		}
		
		public function getChildIndex(child : SpriteSheetDisplayObject) : uint {
			return _children.indexOf(child);
		}
		
		// PRIVATE ================================================================================
		// LISTENERS ==============================================================================
		private function addedToStageHandler(e : Event) : void {
			addEventListener(Event.FRAME_CONSTRUCTED, render, false, 0, true);
		}
		
		private function removedFromStageHandler(e : Event) : void {
			removeEventListener(Event.FRAME_CONSTRUCTED, render, false);
		}
		
		private function render(e : Event) : void {
			bitmapData.fillRect(stage.getRect(this), _color);
			for each (var child : SpriteSheetDisplayObject in _children) {
				child.render();
			}
		}
	}
}